package com.Cfeng.XiaohuanChat.service;

import com.Cfeng.XiaohuanChat.domain.Dtree;
import com.Cfeng.XiaohuanChat.entity.UserFile;
import org.springframework.web.multipart.MultipartFile;

import java.security.Principal;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * @author Cfeng
 * @date 2022/8/12
 * 定义操作Minio上传文件服务
 */

public interface UserMinIOFileService {

    /**
     * @param userFile
     * 获取文件列表，查询当前文件的子文件列表，按照pid和创建时间排序
     * 前台传入的dirIds就是 文件夹/文件ID     比如/linux/cfeng/XXXX; 所以Controller中使用不实例化字段接收，减少
     * 类的数目，否则需要单独编写VO，类似聊天服务的MessageVo
     */
    List<UserFile> getFileList(UserFile userFile);


    /**
     * @param userFile
     * 获取D树列表
     */
    List<Dtree> getTreeList(UserFile userFile);

    /**
     * @param userFile
     * 该方法可以设置文件默认文件夹之后再获取D树列表
     */
    List<Dtree> getDirTreeList(UserFile userFile);


    /**
     * @param principal
     * @param multipartFile
     * @param dirIds
     * @throws Exception
     * 需要传入当前文件的路径，也就是dirIds
     */
    String addFile(Principal principal, MultipartFile multipartFile,String dirIds) throws Exception;

    //从Minio下载文件,可能为空，所以Optional包裹
    Optional<UserFile> getFile(String userName, String fileName);

    //删除Minio上面的文件
    boolean deleteFile(long fileId) throws Exception;

    //根据url删除
    boolean deleteFileByUrl(String url) throws Exception;
    /**
     * 移动文件，需要父id和当前文件id
     */
    boolean moveFile(String ids, Long parentId);

    /**
     * 添加文件夹
     */
    boolean addFolder(UserFile userFile);

    /**
     * 修改文件名称
     */
    boolean updateByName(UserFile userFile);

    /**
     * 获取文件夹
     */
    Map<String,Object>  getDirs(Long id);
}
